<?php
namespace catchAdmin\newsDeclare\model;

use catchAdmin\basics\model\Official;
use catchAdmin\externalGoods\model\search\NewsSearch;
use catchAdmin\newsDeclare\model\search\NewsDeclareSearch;
use catcher\base\CatchModel;
use catcher\CatchAuth;
use think\Exception;
use think\facade\Db;

class NewsDeclare extends CatchModel
{

    use NewsDeclareSearch;

    protected $name = 'db_news_declare';
    protected $field = [
        'id',
        'news_no',
        'news_title',
        'genre',
        'news_link',
        'publication_json',
        'other_publication_json',
        'author_name',
        'chief_creator',
        'editor',
        'byline_order',
        'work_summary',
        'reporter',
        'type',
        'type_1',
        'implementing_unit',
        'implementing_time',
        'rec_object',
        'team_name',
        'team_work_unit',
        'team_personnel_composition',
        'personage_name',
        'personage_birth',
        'personage_political_status',
        'personage_sex',
        'personage_unit_and_position',
        'personage_edu',
        'reporter_phone',
        'attachments',
        'attachments_cxxg',
        'cbxg',
        'back_attachments',
        'is_declare',
        'recommend_counts',
        'created_at',
        'updated_at',
        'deleted_at',
        'tenant_id',
        'creator_id'
    ];

    protected $json = [
        'author_name',
        'publication_json',
        'other_publication_json',
        'attachments',
        'attachments_cxxg',
        'back_attachments'
    ];
    // 设置JSON数据返回数组
    protected $jsonAssoc = true;

    public function getList($tenant_id = 0,$is_declare= 1)
    {
        $user = (new CatchAuth())->user();
        $position = $user['position'];

        $where = [];

        if('all' !== $is_declare){
            $where['nd.is_declare'] = $is_declare;
        }

        if($tenant_id !== 0){
            $where['nd.tenant_id'] = $tenant_id;
        }

        if($position == 101){//代表是机构 101
            $where['nd.creator_id'] = $user['id'];
        }

        $par = \request()->param();
        if(!array_key_exists('field_order',$par)){
            $order = ['nd.id'=>'asc'];
        }else{
            $order =  $par['field_order'];
        }



        //$order['u.username'] = Db::raw("FIELD(u.username, '南京日报','南京出版社','江西日报')");

        $sort_field_arr = [
            '人民日报社江苏分社',
            '新华社江苏分社',
            '中央广电总台江苏总站',
            '光明日报江苏记者站',
            '经济日报驻江苏记者站',
            '中国日报驻江苏记者站',
            '科技日报驻江苏记者站',
            '中国新闻社江苏分社',
            '工人日报驻江苏记者站',
            '中国青年报驻江苏记者站',
            '中国妇女报驻江苏记者站',
            '农民日报驻江苏记者站',
            '法治日报驻江苏记者站',
            '中国文化报江苏记者站',
            '中国工业报社江苏记者站',
            '上海证券报长三角新闻中心',
            '新华报业集团',
            '江苏广电总台（集团）',
            '江苏凤凰出版传媒集团（现代快报社）',
            '南京报业传媒集团',
            '南京广电集团',
            '人民网江苏频道',
            '新华网江苏频道',
            '央视网江苏频道',
            '澎湃新闻',
            '江宁区融媒体中心',
            '浦口区融媒体中心',
            '六合区融媒体中心',
            '溧水区融媒体中心',
            '高淳区融媒体中心',
            '江北新区融媒体中心',
            '玄武区融媒体中心',
            '秦淮区融媒体中心',
            '建邺区融媒体中心',
            '鼓楼区融媒体中心',
            '栖霞区融媒体中心',
            '雨花台区融媒体中心',
        ];

        // 使用 array_map 函数和匿名函数添加单引号
        $sort_field_arr = array_map(function($item) {
            return "'" . $item . "'";
        }, $sort_field_arr);

        $string = implode(", ", $sort_field_arr);
        $field_string = "FIELD(u.rec_unit, $string)";

        if(array_key_exists('nd.recommend_counts',$order)){//说明按照数量排序
            $field_string = '';
        }elseif (array_key_exists('nd.rec_unit',$order)){//按照单位
            $order = [];
        }

        $model =  $this
            ->alias('nd')
            ->field("nd.*,u.rec_unit")
            ->catchSearch()
            ->where($where)
            ->leftJoin('users u','u.id = nd.creator_id')
            ;
//            ->order($this->aliasField('id'), 'desc')
//            ->order('id','desc')
//            ->orderRaw("FIELD(u.username, '南京日报','江西日报','南京出版社')")
//            ->orderRaw("FIELD(u.rec_unit, '人民日报社江苏分社', '新华社江苏分社', '中央广电总台江苏总站', '光明日报江苏站', '经济日报江苏站', '科技日报江苏站', '工人日报江苏站', '中国青年报江苏站', '中国妇女报江苏站', '农民日报江苏站', '法治日报江苏站', '中国日报江苏记者站', '中国新闻社江苏分社', '香港大公文汇传媒集团江苏记者站', '香港商报有限公司江苏代表处', '新华报业集团', '江苏广电总台', '现代快报社', '南京报业传媒集团', '南京广电集团', '江宁区融媒体中心', '浦口区融媒体中心', '六合区融媒体中心', '溧水区融媒体中心', '高淳区融媒体中心', '江北新区融媒体中心', '玄武区融媒体中心', '秦淮区融媒体中心', '建邺区融媒体中心', '鼓楼区融媒体中心', '栖霞区融媒体中心', '雨花台区融媒体中心')")

        if($field_string != ''){
            $model = $model->orderRaw($field_string);
        }
        if(!empty($order)){
            $model = $model->order($order);
        }

        return $model
            ->paginate()
            ->each(function (&$item) {
                //拿到推荐列表
                $item['recommendList'] = (new NewsReview())
                    ->field('nr.created_at,u.username')
                    ->alias('nr')
                    ->leftJoin('users u','u.id = nr.judge_id')
                    ->where('article_id',$item['id'])
                    ->select()->toArray();
            });
    }

    public function getExportList($tenant_id = 0,$is_declare= 1)
    {
        $user = (new CatchAuth())->user();
        $position = $user['position'];

        $where = [];

        if('all' !== $is_declare){
            $where['nd.is_declare'] = $is_declare;
        }

        if($tenant_id !== 0){
            $where['nd.tenant_id'] = $tenant_id;
        }

        if($position == 101){//代表是机构 101
            $where['nd.creator_id'] = $user['id'];
        }

        $par = \request()->param();
        if(!array_key_exists('field_order',$par)){
            $order = ['nd.id'=>'asc'];
        }else{
            $order =  $par['field_order'];
        }



        //$order['u.username'] = Db::raw("FIELD(u.username, '南京日报','南京出版社','江西日报')");

        $sort_field_arr = [
            '人民日报社江苏分社',
            '新华社江苏分社',
            '中央广电总台江苏总站',
            '光明日报江苏记者站',
            '经济日报驻江苏记者站',
            '中国日报驻江苏记者站',
            '科技日报驻江苏记者站',
            '中国新闻社江苏分社',
            '工人日报驻江苏记者站',
            '中国青年报驻江苏记者站',
            '中国妇女报驻江苏记者站',
            '农民日报驻江苏记者站',
            '法治日报驻江苏记者站',
            '中国文化报江苏记者站',
            '中国工业报社江苏记者站',
            '上海证券报长三角新闻中心',
            '新华报业集团',
            '江苏广电总台（集团）',
            '江苏凤凰出版传媒集团（现代快报社）',
            '南京报业传媒集团',
            '南京广电集团',
            '人民网江苏频道',
            '新华网江苏频道',
            '央视网江苏频道',
            '澎湃新闻',
            '江宁区融媒体中心',
            '浦口区融媒体中心',
            '六合区融媒体中心',
            '溧水区融媒体中心',
            '高淳区融媒体中心',
            '江北新区融媒体中心',
            '玄武区融媒体中心',
            '秦淮区融媒体中心',
            '建邺区融媒体中心',
            '鼓楼区融媒体中心',
            '栖霞区融媒体中心',
            '雨花台区融媒体中心',
        ];

        // 使用 array_map 函数和匿名函数添加单引号
        $sort_field_arr = array_map(function($item) {
            return "'" . $item . "'";
        }, $sort_field_arr);

        $string = implode(", ", $sort_field_arr);
        $field_string = "FIELD(u.rec_unit, $string)";

        if(array_key_exists('nd.recommend_counts',$order)){//说明按照数量排序
            $field_string = '';
        }elseif (array_key_exists('nd.rec_unit',$order)){//按照单位
            $order = [];
        }

        $model =  $this
            ->alias('nd')
            ->field("nd.*,u.rec_unit")
            ->catchSearch()
            ->where($where)
            ->leftJoin('users u','u.id = nd.creator_id')
        ;
//            ->order($this->aliasField('id'), 'desc')
//            ->order('id','desc')
//            ->orderRaw("FIELD(u.username, '南京日报','江西日报','南京出版社')")
//            ->orderRaw("FIELD(u.rec_unit, '人民日报社江苏分社', '新华社江苏分社', '中央广电总台江苏总站', '光明日报江苏站', '经济日报江苏站', '科技日报江苏站', '工人日报江苏站', '中国青年报江苏站', '中国妇女报江苏站', '农民日报江苏站', '法治日报江苏站', '中国日报江苏记者站', '中国新闻社江苏分社', '香港大公文汇传媒集团江苏记者站', '香港商报有限公司江苏代表处', '新华报业集团', '江苏广电总台', '现代快报社', '南京报业传媒集团', '南京广电集团', '江宁区融媒体中心', '浦口区融媒体中心', '六合区融媒体中心', '溧水区融媒体中心', '高淳区融媒体中心', '江北新区融媒体中心', '玄武区融媒体中心', '秦淮区融媒体中心', '建邺区融媒体中心', '鼓楼区融媒体中心', '栖霞区融媒体中心', '雨花台区融媒体中心')")

        if($field_string != ''){
            $model = $model->orderRaw($field_string);
        }
        if(!empty($order)){
            $model = $model->order($order);
        }

        return $model->select();
//            ->each(function (&$item) {
//                //拿到推荐列表
//                $item['recommendList'] = (new NewsReview())
//                    ->field('nr.created_at,u.username')
//                    ->alias('nr')
//                    ->leftJoin('users u','u.id = nr.judge_id')
//                    ->where('article_id',$item['id'])
//                    ->select()->toArray();
//            });
    }
}
